home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 9
/
FM Towns Free Software Collection 9.iso
/
t_os
/
tool
/
inryoku
/
inryoku.bas
next >
Wrap
BASIC Source File
|
1994-11-16
|
11KB
|
305 lines
10010 '--------------------------------------------------------------------
10020 '
10030 ' 万有引力
10040 '
10050 ' Copyright (C) TeC 1994
10060 '--------------------------------------------------------------------
10070 SCREEN 0
10080 SCREEN@ 0
10090 'DIM SE01(5795),SE02(15634),SE03(14901),SE04(18819) '**
10100 'DIM SE05(25573),SE06(24072),SE07(8348) '**
10110 'LOAD@"se_01.snd",SE01 '**
10120 'LOAD@"se_02.snd",SE02 '**
10130 'LOAD@"se_03.snd",SE03 '**
10140 'LOAD@"se_04.snd",SE04 '**
10150 'LOAD@"se_05.snd",SE05 '**
10160 'LOAD@"se_06.snd",SE06 '**
10170 'LOAD@"se_07.snd",SE07 '**
10180 SC=5
10190 *設定 '―――――――――――――――――――――――――――――――
10200 FOR I=1 TO 10
10210 PALETTE I,[0,255,255]
10220 NEXT I
10230 PALETTE 11,[63,63,63]
10240 WINDOW(0,479)-(639,0)
10250 DEF PEN 0,1
10260 CLS
10270 MOUSE 0
10280 MOUSE 2,CHR$(127,255,159,255,135,255,193,255,192,127,224,31,244,7,240,0,240,1,248,3,248,7,252,15,252,31,254,61,254,120,254,253),CHR$(128,0,96,0,120,0,62,0,47,128,23,224,19,248,9,255,8,254,4,124,4,56,2,16,2,32,1,66,1,135,1,2)
10290 MOUSE 4,0,0,639,479
10300 MOUSE 3,0,8 : MOUSE 3,1,8
10310 MOUSE 1,320,239,1
10320 DIM PX(10),PY(10),VX(10),VY(10),PW(10),A$(10)
10330 DIM PXD(10),PYD(10),PXS(10),PYS(10)
10340 N=0 : F=0 : C=0
10350 PC=1
10360 A$(0)=" sample "
10370 A$(1)=" 位置を決めてください"
10380 A$(2)=" 速度を決めてください"
10390 A$(3)="質量の比を決めてください"
10400 A$(4)=" キャンセルしました"
10410 A$(5)=" データがありません"
10420 A$(6)=" データがいっぱいです"
10430 A$(7)=" 演算を実行します"
10440 A$(8)=" 演算を終了します"
10450 A$(9)=" 終了します"
10460 ON ERROR GOTO *エラー処理
10470 '
10480 '
10490 '
10500 *入力処理 '―――――――――――――――――――――――――――――
10510 '
10520 '::: 位置決め :::
10530 MOUSE 4,0,0,639,479
10540 WHILE MOUSE(2,0)=-1 OR MOUSE(2,1)=-1
10550 WEND
10560 WHILE NOT INKEY$=""
10570 WEND
10580 WHILE MOUSE(2,0)=0
10590 IF MOUSE(2,1)=-1 THEN *終了
10600 IN$=INKEY$ : IF NOT IN$="" THEN GOSUB *微調整
10610 IF IN$=CHR$(&H0D) THEN *演算&出力
10620 LOCATE 0,0 : PRINT USING"X=### [dot]";MOUSE(0)
10630 LOCATE 0,1 : PRINT USING"Y=### [dot]";479-MOUSE(1)
10640 IF TIME>1 THEN LOCATE 55,23 : PRINT A$(1)
10650 WEND
10660 'PCMPLAY SE01,127 '**
10670 N=N+1
10680 PX(N)=MOUSE(4,0) : PY(N)=479-MOUSE(5,0)
10690 PXS(N)=PX(N) : PYS(N)=PY(N)
10700 CIRCLE(PX(N),PY(N)),3,%N,,,,F
10710 '
10720 '::: 速度決め :::
10730 LOCATE 55,23 : PRINT A$(2)
10740 WHILE MOUSE(2,0)=-1 OR MOUSE(2,1)=-1
10750 WEND
10760 WHILE NOT INKEY$=""
10770 WEND
10780 WHILE MOUSE(2,0)=0
10790 IF MOUSE(2,1)=-1 THEN *キャンセル処理
10800 IN$=INKEY$ : IF NOT IN$="" THEN GOSUB *微調整
10810 MXX=(MOUSE(0)-PX(N))/10 : MYY=(479-MOUSE(1)-PY(N))/10
10820 IF MXX=0 AND MYY=0 THEN MDD=0 : GOTO 10900
10830 IF MXX>0 AND MYY=0 THEN MDD=0 : GOTO 10900
10840 IF MXX=0 AND MYY>0 THEN MDD=90 : GOTO 10900
10850 IF MXX<0 AND MYY=0 THEN MDD=180 : GOTO 10900
10860 IF MXX=0 AND MYY<0 THEN MDD=270 : GOTO 10900
10870 MDD=ATN(MYY/MXX)*180/3.14159!
10880 IF MXX<0 THEN MDD=MDD+180 : GOTO 10900
10890 IF MXX>0 AND MYY<0 THEN MDD=MDD+360
10900 LOCATE 16,0 : PRINT USING"V=##.## [dot/cycle]";SQR(MXX^2+MYY^2)
10910 LOCATE 16,1 : PRINT USING"θ=###.# [゜]";MDD
10920 LOCATE 39,0 : PRINT USING"Vx=+##.# [dot/cycle]";MXX
10930 LOCATE 39,1 : PRINT USING"Vy=+##.# [dot/cycle]";MYY
10940 WEND
10950 'PCMPLAY SE01,127 '**
10960 VX(N)=(MOUSE(4,0)-PX(N))/10 : VY(N)=(479-MOUSE(5,0)-PY(N))/10
10970 LINE(PX(N),PY(N))-STEP(VX(N)*5,VY(N)*5),PSET,4
10980 '
10990 '::: 質量決め :::
11000 MOUSE 4,0,479-PY(N),999,479-PY(N)
11010 LOCATE 55,23 : PRINT A$(3)
11020 WHILE MOUSE(2,0)=-1 OR MOUSE(2,1)=-1
11030 WEND
11040 WHILE NOT INKEY$=""
11050 WEND
11060 WHILE MOUSE(2,0)=0
11070 IF MOUSE(2,1)=-1 THEN *キャンセル処理
11080 IN$=INKEY$ : IF NOT IN$="" THEN GOSUB *微調整
11090 MMX=MOUSE(0)
11100 IF 0=<MMX AND MMX<=231 THEN PALETTE N,[ 24+MMX, 24+MMX, 255]
11110 IF 232=<MMX AND MMX<=487 THEN PALETTE N,[ 255,487-MMX,487-MMX]
11120 IF 488=<MMX AND MMX<=743 THEN PALETTE N,[ 255,MMX-488, 0]
11130 IF 744=<MMX AND MMX<=999 THEN PALETTE N,[999-MMX, 255, 0]
11140 MMM=(MMX+1)/2
11150 LOCATE 64,0 : PRINT USING"M=###.#";MMM
11160 WEND
11170 'PCMPLAY SE02,127 '**
11180 PW(N)=MMM
11190 CLS 1
11200 IF N<10 THEN *入力処理
11210 LOCATE 55,23 : PRINT A$(6)
11220 TIME$="00:00:00"
11230 IF TIME<2 THEN 11230
11240 '
11250 '
11260 '
11270 *演算&出力 '――――――――――――――――――――――――――――
11280 'PCMPLAY SE04,127 '**
11290 CLS 1
11300 MOUSE 1,,,0
11310 LOCATE 55,23 : PRINT A$(7)
11320 TIME$="00:00:00"
11330 IF TIME<2 THEN 11330
11340 CLS 1
11350 IF N>0 THEN 11490
11360 LOCATE 55,23 : PRINT A$(5)
11370 TIME$="00:00:00"
11380 IF TIME<1 THEN 11380
11390 LOCATE 55,23 : PRINT A$(0)
11400 IF TIME<2 THEN 11400
11410 GOSUB *サンプル
11420 'PCMPLAY SE06,127 '**
11430 LOCATE 78,23 : PRINT USING"#";SC
11440 READ PC,N
11450 FOR I=1 TO N
11460 READ PX(I),PY(I),VX(I),VY(I),PW(I),G,R,B
11470 PXS(I)=PX(I) : PYS(I)=PY(I) : PALETTE I,[G,R,B]
11480 NEXT I
11490 LOCATE 0,0 : PRINT"view : 0"
11500 LOCATE 0,1 : PRINT"time : 0 [cycle]"
11510 CLS 5
11520 DEF PEN 0,5
11530 FOR I=1 TO N
11540 PSET(PX(I),PY(I)),%I
11550 NEXT I
11560 C=C+1
11570 FOR I=1 TO N
11580 FOR J=1 TO N
11590 IF MOUSE(2,1)=-1 THEN *演算終了
11600 IN$=INKEY$ : IF NOT IN$="" THEN GOSUB 11780
11610 IF J=I THEN 11670
11620 XX=PX(I)-PX(J) : YY=PY(I)-PY(J)
11630 IF XX=0 AND YY=0 THEN 11670
11640 RR=XX^2+YY^2
11650 VX(I)=VX(I)-PC*PW(J)*XX/RR^1.5!
11660 VY(I)=VY(I)-PC*PW(J)*YY/RR^1.5!
11670 NEXT J
11680 PXD(I)=PX(I)+VX(I) : PYD(I)=PY(I)+VY(I)
11690 NEXT I
11700 FOR I=1 TO N
11710 PX(I)=PXD(I) : PY(I)=PYD(I)
11720 PSET(PXS(I),PYS(I)),%11
11730 PSET(PX(I),PY(I)),%I
11740 PXS(I)=PX(I) : PYS(I)=PY(I)
11750 NEXT I
11760 LOCATE 7,1 : PRINT USING"#,###,###";C
11770 GOTO 11560
11780 IF IN$=CHR$(&H1E) THEN F=F+1 : GOTO 11830
11790 IF IN$=CHR$(&H1F) THEN F=F-1 : GOTO 11840
11800 WHILE NOT INKEY$=""
11810 WEND
11820 RETURN
11830 IF F>99 THEN F=99 : RETURN
11840 IF F<0 THEN F=0 : RETURN
11850 FX1= 0-640*F^2 : FY1=479+480*F^2
11860 FX2=639+640*F^2 : FY2= 0-480*F^2
11870 WINDOW(FX1,FY1)-(FX2,FY2)
11880 LOCATE 7,0 : PRINT USING"##";F
11890 CLS 5
11900 FOR K=1 TO N
11910 PSET(PX(K),PY(K)),%K
11920 NEXT K
11930 WHILE NOT INKEY$=""
11940 WEND
11950 RETURN
11960 '
11970 '
11980 '
11990 *微調整 '――――――――――――――――――――――――――――――
12000 IF IN$=CHR$(&H1C) THEN MOUSE 1,MOUSE(0)+1,MOUSE(1),1 : GOTO 12060
12010 IF MOUSE(0)=0 THEN GOTO 12030
12020 IF IN$=CHR$(&H1D) THEN MOUSE 1,MOUSE(0)-1,MOUSE(1),1 : GOTO 12060
12030 IF MOUSE(1)=0 THEN GOTO 12050
12040 IF IN$=CHR$(&H1E) THEN MOUSE 1,MOUSE(0),MOUSE(1)-1,1 : GOTO 12060
12050 IF IN$=CHR$(&H1F) THEN MOUSE 1,MOUSE(0),MOUSE(1)+1,1 : GOTO 12060
12060 WHILE NOT INKEY$=""
12070 WEND
12080 RETURN
12090 '
12100 '
12110 '
12120 *キャンセル処理 '――――――――――――――――――――――――――
12130 'PCMPLAY SE03,127 '**
12140 N=N-1
12150 CLS
12160 LOCATE 55,23 : PRINT A$(4)
12170 TIME$="00:00:00"
12180 IF N=0 THEN *入力処理
12190 FOR I=1 TO N
12200 CIRCLE(PX(I),PY(I)),3,%I,,,,F
12210 LINE(PX(I),PY(I))-STEP(VX(I)/2,VY(I)/2),PSET,4
12220 NEXT I
12230 GOTO *入力処理
12240 '
12250 '
12260 '
12270 *エラー処理 '――――――――――――――――――――――――――――
12280 RESUME NEXT
12290 '
12300 '
12310 '
12320 *演算終了 '―――――――――――――――――――――――――――――
12330 'PCMPLAY SE05,127 '**
12340 LOCATE 55,23 : PRINT A$(8)
12350 TIME$="00:00:00"
12360 IF TIME<2 THEN 12360
12370 GOTO *設定
12380 '
12390 '
12400 '
12410 *終了 '―――――――――――――――――――――――――――――――
12420 'PCMPLAY SE07,127 '**
12430 ON ERROR GOTO 0
12440 MOUSE 5
12450 WINDOW(0,0)-(639,479)
12460 LOCATE 55,23 : PRINT A$(9)
12470 TIME$="00:00:00"
12480 IF TIME<2 THEN 12480
12490 CLS
12500 PALETTE
12510 CLEAR
12520 END
12530 '
12540 '
12550 '
12560 *サンプル '―――――――――――――――――――――――――――――
12570 SC=SC+1 : IF SC>5 THEN SC=0
12580 ON SC GOTO 12600,12610,12620,12630,12640
12590 RESTORE *SD0 : RETURN
12600 RESTORE *SD1 : RETURN
12610 RESTORE *SD2 : RETURN
12620 RESTORE *SD3 : RETURN
12630 RESTORE *SD4 : RETURN
12640 RESTORE *SD5 : RETURN
12650 *SD0
12660 DATA 1,5
12670 DATA 320,240, 0.0, 0.0, 500.0, 255,255, 0
12680 DATA 100,240, 0.0, 1.5, 0.5, 150,150,255
12690 DATA 320,460, 1.5, 0.0, 0.5, 150,150,255
12700 DATA 540,240, 0.0,-1.5, 0.5, 150,150,255
12710 DATA 320, 20, -1.5, 0.0, 0.5, 150,150,255
12720 *SD1
12730 DATA 1,4
12740 DATA 320,240, 0.0, 0.0, 500.0, 0,255, 0
12750 DATA 100,240, 0.0, 1.0, 0.5, 255,255,255
12760 DATA 240,240, 0.0, 2.0, 0.5, 24, 24,255
12770 DATA 280,240, 0.0, 3.0, 0.5, 255,255, 0
12780 *SD2
12790 DATA 1,4
12800 DATA 320,240, 0.0, 0.0, 500.0, 0,255, 0
12810 DATA 100,240, 0.0, 1.0, 0.5, 255,255,255
12820 DATA 240,240, 0.0, 2.0, 0.5, 24, 24,255
12830 DATA 280,240, 0.0,-3.0, 0.5, 255,255, 0
12840 *SD3
12850 DATA 1,5
12860 DATA 320,240, 0.0, 0.0, 500.0, 0,255, 0
12870 DATA 100,240, 0.0, 1.0, 0.5, 255,255,255
12880 DATA 240,240, 0.0, 2.0, 0.5, 24, 24,255
12890 DATA 280,240, 0.0, 3.0, 0.5, 255,255, 0
12900 DATA 500,240, 0.0, 1.0, 50.0, 120,255, 0
12910 *SD4
12920 DATA 1,5
12930 DATA 320,240, 0.0, 0.0, 500.0, 0,255, 0
12940 DATA 100,240, 0.0, 1.0, 0.5, 255,255,255
12950 DATA 240,240, 0.0, 2.0, 0.5, 24, 24,255
12960 DATA 280,240, 0.0,-3.0, 0.5, 255,255, 0
12970 DATA 500,240, 0.0, 1.0, 50.0, 120,255, 0
12980 *SD5
12990 DATA 1,5
13000 DATA 320,240, 0.0, 0.0, 500.0, 0,255, 0
13010 DATA 100,240, 0.0, 1.0, 0.5, 255,255,255
13020 DATA 240,240, 0.0, 2.0, 0.5, 24, 24,255
13030 DATA 280,240, 0.0, 3.0, 0.5, 255,255, 0
13040 DATA 500,240, 0.0,-1.0, 5.0, 120,255, 0